package com.coder.rental.utils;

import lombok.Data;
import lombok.experimental.Accessors;

/**
 * 封装统一返回结果
 */
@Data
// @Accessors(chain = true) 注解是 Lombok 提供的一个注解，专门用于启用 链式编程。它的作用是为你自动生成设置属性的 setter 方法，使得这些 setter 方法返回当前对象（this），从而支持链式调用。
// 如果没有加 @Accessors(chain = true) 注解，Lombok 会默认为每个字段生成普通的 setter 方法，这些 setter 方法的返回值是 void，这意味着你不能直接使用链式编程。
@Accessors(chain = true) // 可以使用链式编程处理方式
public class Result<T> {
    private Integer code; // 返回状态码 四种取值
    private String message; // 返回消息
    private Boolean success; // 操作成功状态
    private T data; // 数据

    private Result() {
    }

    // 操作成功：增删改 不用返回具体数据
    // 第一个<T>是用来指定方法返回的 Result<T> 类型中的 T 的具体类型
    public static <T> Result<T> success() {
        return new Result<T>().setSuccess(true)
                .setCode(ResultCode.SUCCESS)
                .setMessage("操作成功");
    }

    // 操作成功：查 需要返回具体数据
    public static <T> Result<T> success(T data) {
        return new Result<T>().setSuccess(true)
                .setCode(ResultCode.SUCCESS)
                .setMessage("操作成功")
                .setData(data); // 拿到数据
    }

    // 操作失败
    public static <T> Result<T> fail() {
        return new Result<T>().setSuccess(false)
                .setCode(ResultCode.ERROR)
                .setMessage("操作失败");
    }
}
